feat: faces same-cube verifier (invariant-path 'faces' profile)#32
Merged
Conversation
Ground the AffineScript 'different faces, same cube' invariant: a profile (profiles/faces.md), a same-cube corpus (examples/same-cube/greet — one program in all six faces), and a verifier (scripts/verify-same-cube.sh) that runs each face's preview-* lowering, normalises, and grounds cross-face equality against the canonical reference, emitting invariant-path claim records. Per-face snapshot tests catch drift within a face; this catches divergence between faces. Doc-profile shape — no Rust/CLI change. New files MPL-2.0. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KPG9mEQXFyA3k7NWAzMNMr
hyperpolymath
marked this pull request as ready for review
June 18, 2026 10:29
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Casts invariant-path as the same-cube verifier for the AffineScript face family — grounding the load-bearing claim "different faces, same cube" as an invariant-path claim path.
How (doc-profile shape — no Rust/CLI change)
profiles/faces.md— thefacesprofile: claim = face source →(preview-* transform)→ canonical cube; invariant = all faces of one program yield the identical cube.examples/same-cube/greet/— one program in all six faces (identical semantics, unlike the demonstrative affinescript examples which differ per face). canonical + rattle/jaffa/pseudo/lucid/cafe.scripts/verify-same-cube.sh— detects each file's face from itsface:pragma, runs the matchingpreview-*, normalises (modulo comments/whitespace), and grounds cross-face equality vs the canonical reference; emitsGrounded/UngroundedJSONL claim records. SKIPs gracefully (exit 0) when noaffinescriptbinary is reachable (grounding happens in CI).just same-cuberecipe; DESIGN/README/examples wiring.Why it matters
Per-face snapshot tests (
affinescript/tests/faces/) catch drift within a face but never compare face A's cube against face B's. This grounds the cross-face equality directly and, true to invariant-path's identity, acts as a claim-path debugger — aDIFFlocates exactly which face breaks the cube.Licence
New files MPL-2.0 (matching the repo's file headers).⚠️ Unrelated flag: the repo README still shows a
PMPL-1.0badge over an MPL-2.0 header — drift to reconcile separately (not touched here).🤖 Generated with Claude Code
https://claude.ai/code/session_01KPG9mEQXFyA3k7NWAzMNMr
Generated by Claude Code